package br.com.pfc.application.exceptions;

/**
 * Classe de exceção lançada para violações de regras de negócio do sistema.
 */
public class BusinessException extends AbstractUncheckedApplicationException {

    public BusinessException() {
        super();
    }

    public BusinessException(String msg) {
        super(msg);
    }

    public BusinessException(String msg, Exception e) {
        super(msg, e);
    }

    public BusinessException(BusinessExceptionCode code) {
        super(code.toString());
    }

    public BusinessException(BusinessExceptionCode code, Exception e) {
        super(code.toString(), e);
    }

    public enum BusinessExceptionCode {

        UC01_FA01("UC01_FA01", "Mensagem aplicattionExecption UC01.FA01 <IMPLEMENTAR!>");
        /**
         * Tamanho padrão do StringBuilder de exceção.
         */
        private final int DEFAULT_EXCEPTION_STRING_SIZE = 100;
        private final String name;
        private final String msg;

        private BusinessExceptionCode(String name, String msg) {
            this.name = name;
            this.msg = msg;
        }

        @Override
        public String toString() {
            StringBuilder sb = new StringBuilder(DEFAULT_EXCEPTION_STRING_SIZE);

            sb.append(name).append(" - ").append(msg);

            return sb.toString();
        }
    }
}
